package mlz.a_stram;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/*
终结方法
 */
public class StreamDemo04 {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("张三",30,170));
        students.add(new Student("李四",17,158));
        students.add(new Student("王五",23,178.8));
        students.add(new Student("赵六",24,166));
        students.add(new Student("张三",18,186));

        // 需求1：请计算出身高超过168的学生有几人。
        long count = students.stream()
                .filter(s -> s.getHeight() > 168)
                .count();
        System.out.println("总共人数:" + count);

        // 需求2：请找出身高最高的学生对象，并输出。
        Student stu = students.stream()
                .max((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()))
                .get();
        System.out.println(stu);//Student{name='张三', age=18, height=186.0}

        // 需求3：请找出身高最矮的学生对象，并输出。
        Student stu2 = students.stream()
                .min((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()))
                .get();
        System.out.println(stu2);//Student{name='李四', age=17, height=158.0}

        // 需求4：请找出身高超过170的学生对象，并放到一个新集合中去返回。
        List<Student> list = students.stream()
                .filter(s -> s.getHeight() > 170)
                .collect(Collectors.toList());//将数据封装到List集合中
        System.out.println(list);

        // 需求5：请找出身高超过170的学生对象，并把学生对象的名字和身高，存入到一个Map集合返回。
        Map<String, Double> map = students.stream()
                .filter(s -> s.getHeight() > 170)
                .distinct()
                .collect(Collectors.toMap(s -> s.getName(), s -> s.getHeight()));
        System.out.println(map);
    }
}















